Many computer programs (e.g., applications) use both local and remote components/resources to execute during run-time. The remote components/resources are traditionally downloaded from a remote source (e.g., a remote server) on demand when they are needed (e.g., when an application using these remote resources is launched, when a feature requiring these remote resources is activated, etc.). This mechanism can cause delays in launching the application or executing certain functions, thus impacting system performances and end-user experiences. This problem becomes increasingly prominent in today's online world, especially for mobile applications running on high latency and low bandwidth networks or applications based on thin-client models that access most data and resources over a network.